#include <bits/stdc++.h>
using namespace std;

/*
1437. 是否所有 1 都至少相隔 k 个元素
已解答
简单
相关标签
premium lock icon
相关企业
提示
给你一个由若干 0 和 1 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素，则返回 true ；否则，返回 false 。

 

示例 1：



输入：nums = [1,0,0,0,1,0,0,1], k = 2
输出：true
解释：每个 1 都至少相隔 2 个元素。
示例 2：



输入：nums = [1,0,0,1,0,1], k = 2
输出：false
解释：第二个 1 和第三个 1 之间只隔了 1 个元素。
 

提示：

1 <= nums.length <= 105
0 <= k <= nums.length
nums[i] 的值为 0 或 1
*/

// 法一
class Solution {
public:
    bool kLengthApart(vector<int>& nums, int k) {
        int last_one = -1;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] == 1) {
                // 不是第一个1 check 与上一个1的distance
                if (last_one != -1 && i - last_one - 1 < k) return false;
                last_one = i;   // update last 1 pos
            }
        }
        return true;
    }
};